package ar.com.algotres.tpdos.views.juego;

import java.util.HashMap;
import java.util.Map;

import javax.swing.JOptionPane;

import ar.com.algotres.tpdos.model.aterrizable.Pista;
import ar.com.algotres.tpdos.model.aviones.Avion;
import ar.com.algotres.tpdos.model.controlador.ITorreDeControl;
import ar.com.algotres.tpdos.model.fisica.AreaAterrizaje;
import ar.com.algotres.tpdos.model.mapas.Mapa;
import ar.com.algotres.tpdos.views.VistaMapa;
import ar.com.algotres.tpdos.views.aviones.VistaAreaAterrizaje;
import ar.com.algotres.tpdos.views.aviones.VistaAvionComputarizado;
import ar.com.algotres.tpdos.views.aviones.VistaAvionHelicoptero;
import ar.com.algotres.tpdos.views.aviones.VistaAvionPesado;
import ar.com.algotres.tpdos.views.aviones.VistaAvionSimple;
import ar.com.algotres.tpdos.views.observadores.ObservadorDeClicks;
import ar.com.algotres.tpdos.views.pistas.VistaPista2;
import ar.com.algotres.tpdos.views.ventanas.VentanaAplicacion;
import ar.uba.fi.algo3.titiritero.ControladorJuego;
import ar.uba.fi.algo3.titiritero.Dibujable;

public class VistaJuego implements IVistaJuego {
	
	private Map <Avion, Dibujable> dibujables = new HashMap<Avion, Dibujable>();
	private ControladorJuego controladorJuego;
	private ObservadorDeClicks observadorDeClicks;
	private VentanaAplicacion ventanaAplicacion;
	
	public VistaJuego(ControladorJuego controladorJuego, VentanaAplicacion ventanaAplicacion) {
		this.controladorJuego = controladorJuego;
		this.ventanaAplicacion = ventanaAplicacion;
	}

	@Override
	public void avionComputarizadoCreado(Avion avion) {
		VistaAvionComputarizado vistaAvionComputarizado = new VistaAvionComputarizado(avion);
		dibujables.put(avion, vistaAvionComputarizado);
		controladorJuego.agregarDibujable(vistaAvionComputarizado);
	}

	@Override
	public void avionSimpleCreado(Avion avion) {
		VistaAvionSimple vistaAvionSimple= new VistaAvionSimple(avion);
		dibujables.put(avion, vistaAvionSimple);
		controladorJuego.agregarDibujable(vistaAvionSimple);		
	}
	
	@Override
	public void avionPesadoCreado(Avion avion) {
		VistaAvionPesado vistaAvionPesado = new VistaAvionPesado(avion);
		dibujables.put(avion, vistaAvionPesado);
		controladorJuego.agregarDibujable(vistaAvionPesado);		
	}
	
	@Override
	public void avionHelicopteroCreado(Avion avion) {
		VistaAvionHelicoptero vistaAvionHelicoptero = new VistaAvionHelicoptero(avion);
		dibujables.put(avion, vistaAvionHelicoptero);
		controladorJuego.agregarDibujable(vistaAvionHelicoptero);		
	}

	@Override
	public void juegoGanado() {
		JOptionPane.showMessageDialog(ventanaAplicacion,"Ganaste!", "Cop-Control", JOptionPane.PLAIN_MESSAGE);	
	}

	@Override
	public void juegoPerdido() {
		JOptionPane.showMessageDialog(ventanaAplicacion,"Perdiste…", "Cop-Control", JOptionPane.PLAIN_MESSAGE);
	}

	@Override
	public void juegoTerminado() {
		for (Dibujable dibujable : dibujables.values()){
			controladorJuego.removerDibujable(dibujable);
		}
		controladorJuego.removerMouseClickObservador(observadorDeClicks);
		controladorJuego.detenerJuego();
	}

	@Override
	public void mapaCreado(Mapa mapa) {
	
		VistaMapa vistaMapa = new VistaMapa();
		vistaMapa.setPosicionable(mapa);
		
		controladorJuego.agregarDibujable(vistaMapa);
		
		for (Pista pista : mapa.getPistas()){
			
			for (AreaAterrizaje areaAterrizaje : pista.getAreasAterrizaje()){
				VistaAreaAterrizaje vistaAreaAterrizaje = new VistaAreaAterrizaje(areaAterrizaje);
				vistaAreaAterrizaje.setPosicionable(areaAterrizaje);
				controladorJuego.agregarDibujable(vistaAreaAterrizaje);
			}
			
			VistaPista2 vistaPista = new VistaPista2(pista);
			vistaPista.setPosicionable(pista);
			controladorJuego.agregarDibujable(vistaPista);
			
		}
	}


	@Override
	public void avionAterrizado(Avion avion) {
		controladorJuego.removerDibujable(dibujables.get(avion));
		
	}

	@Override
	public void torreDeControlCreada(ITorreDeControl torreDeControl) {
		observadorDeClicks= new ObservadorDeClicks(torreDeControl); 
		controladorJuego.agregarMouseClickObservador(observadorDeClicks);
	}

}
